package APE.Flux;


import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ReceptionFichiers {
	
	public void start(){
		ServerSocket serveur = null;
	    Socket soc = null;
	    final String RACINE = "E:\\java\\receptionFichiers\\";
	    int[] tailleFichier;
	    byte[] buffer;
	    String[] nomFichier;
	    FileOutputStream fos;
	    File fOutput;
	    int tailleTotaleFichier =0;

	    //Runtime runtime = Runtime.getRuntime();
	    
	 
	    try {
		     serveur = new ServerSocket(8020);
		     System.out.println("en attente d'une connexion");
		     soc = serveur.accept();
		     InputStream o = soc.getInputStream();
		     DataInputStream s = new DataInputStream(o);
		     ObjectInput fichierCourrant = new ObjectInputStream(o);
		     System.out.println("Connexion de "+soc.getInetAddress());
		     
		     tailleFichier=  new int[(int) fichierCourrant.readObject()];	//reception du nombre de fichiers +création du tableau contenant les tailles
		     nomFichier = new String[tailleFichier.length]; // création du tableau contenant les noms des fichiers
		     System.out.println("Nombres d'éléments :"+tailleFichier.length);
		     
		     for(int i=0;i<tailleFichier.length;i++){
		    	 /**
		    	  * lire la taille et le nom des fichiers et le mettre dans le tableau
		    	  */ 
		    	 tailleFichier[i]=(int) fichierCourrant.readObject();
		    	 nomFichier[i] =(String)fichierCourrant.readObject();
		    	 tailleTotaleFichier= tailleTotaleFichier+ tailleFichier[i];
		    	 System.out.println("nom du fichier: "+nomFichier[i]);
		     }    	 
		    
		     buffer= new byte[tailleTotaleFichier];
		     System.out.println("Taille totale attendue: "+buffer.length);
		     
		     s.read(buffer); //lit toutes les données du flux

		     for(int i=0;i<tailleFichier.length;i++){
		    	 /**
		    	  * Creation de chaque fichier
		    	  **/
		    	fOutput=new File(RACINE+nomFichier[i]);
		    	fos = new FileOutputStream(fOutput);
		    	
		    	 for(int j=0; j<buffer.length;j++ ){
		    		/*
		    		 * ecriture des fichiers Byte par Byte
		    		 */
		    		fos.write(buffer[i]);
		    		 i++;
		    	} 
		    	
		    	
		    	fos.close();
		    	fos=null;
		    	fOutput=null;
		     }
		      s.close();

	
	    } catch (Exception e) {
				System.out.println(e.getMessage());
				System.out.println("Erreur de serialization");
				System.exit(1);
    }

}
}
